#include "graph.hpp"
using namespace std;

bool Graph::addVertice(const string &v)
{
    _map[v] = list<Connect>();
    _alivemap[v] = true;
}

bool Graph::delVertice(const string &v)
{
    if (_alivemap[v])
    {
        _alivemap[v] = false;
        return true;
    }
    return false;
}

bool Graph::connectAtoB(const string &A, const string &B)
{
    if (_alivemap[A] && _alivemap[B])
    {
        _map[A].push_back(Connect(B, 1));
        return true;
    }
    return false;
}

bool Graph::connectAtoB(const string &A, const string &B, int len)
{
    if (_alivemap[A] && _alivemap[B])
    {
        _map[A].push_back(Connect(B, len));
        return true;
    }
    return false;
}

void Graph::BFS()
{
    queue<string> q;
    vector<pair<string, bool>> visited;
    for_each(_alivemap.begin(), _alivemap.end(), [&visited](string name)
             { visited.push_back(pair<string, bool>(name, false)); });
    for (auto it : visited)
    {
        q.push(it.first);
        //
    }
}

void Graph::DFS()
{
}

void Graph::BFS(CallBack &func)
{
}

void Graph::DFS(CallBack &func)
{
}
